930f63852dd3637b1b49cfc0f58c90b45203ba5a,src/mobi/hsz/idea/gitignore/util/Glob.java,Glob,createRegex,#String#boolean#,200
Before Change
}
if (star || doubleStar) {
if (StringUtil.endsWithChar(sb, '/')) {
sb.append(acceptChildren ? ".+" : "[^/]+");
} else {
sb.append("[^/]*");
After Change
return cached;
}
StringBuilder sb = new StringBuilder("^");
boolean escape = false, star = false, doubleStar = false, bracket = false;
int beginIndex = 0;
if (StringUtil.startsWith(glob, "**")) {
sb.append("(?:[^/]*?/)*");
beginIndex = 2;
doubleStar = true;
} else if (StringUtil.startsWith(glob, "*/")) {
sb.append("[^/]*");
beginIndex = 1;
star = true;
} else if (StringUtil.equals("*", glob)) {
sb.append(".*");
} else if (StringUtil.startsWithChar(glob, '*')) {
sb.append(".*?");
} else if (!StringUtil.containsChar(glob, '/')) {
sb.append("(?:[^/]*?/)*");
} else if (StringUtil.startsWithChar(glob, '/')) {
beginIndex = 1;
}
char[] chars = glob.substring(beginIndex).toCharArray();
for (char ch : chars) {
if (bracket && ch != ']') {
sb.append(ch);
continue;
} else if (doubleStar) {
doubleStar = false;
if (ch == '/') {
sb.append("(?:[^/]*/)*?");
continue;
} else {
sb.append("[^/]*?");
}
}
if (ch == '*') {
if (escape) {
sb.append("\\*");
escape = false;
star = false;
} else if (star) {
char prev = sb.length() > 0 ? sb.charAt(sb.length() - 1) : '\0';
if (prev == '\0' || prev == '^' || prev == '/') {
doubleStar = true;
} else {
sb.append("[^/]*?");
}
star = false;
} else {
star = true;
}
continue;
} else if (star) {
sb.append("[^/]*?");
star = false;
}
switch (ch) {
case '\\':
if (escape) {
sb.append("\\\\");
escape = false;
} else {
escape = true;
}
break;
case '?':
if (escape) {
sb.append("\\?");
escape = false;
} else {
sb.append('.');
}
break;
case '[':
if (escape) {
sb.append('\\');
escape = false;
} else {
bracket = true;
}
sb.append(ch);
break;
case ']':
if (!bracket) {
sb.append('\\');
}
sb.append(ch);
bracket = false;
escape = false;
break;
case '.':
case '(':
case ')':
case '+':
case '|':
case '^':
case '$':
case '@':
case '%':
sb.append('\\');
sb.append(ch);
escape = false;
break;
default:
escape = false;
sb.append(ch);
}
}
if (star || doubleStar) {
if (StringUtil.endsWithChar(sb, '/')) {
sb.append(acceptChildren ? ".+" : "[^/]+/?");
} else {
sb.append("[^/]*/?");